package com.king.collect;

import java.util.ArrayList;
import java.util.List;

import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableMap;
import com.google.common.collect.Lists;

/**
 * @author taomk
 * @version 1.0
 * @since 15-1-25 下午10:03
 */
public class ListTest {

	public static void main(String [] args) {

		List<String> list0 = Lists.newArrayList();
		list0.add("a");
		list0.add("b");
		list0.add("c");
		list0.add("d");

		List<String> list1 = Lists.newArrayList("a", "b", "c", "d");

		// 不可变集合List（JDK1.6这么用）
		List<String> list = new ArrayList<String>();
		list.add("a");
		list.add("b");
		list.add("c");
		list.add("d");

		// 不可变集合List（Guava这么用）
		ImmutableList<String> immutableList = ImmutableList.of("a", "b", "c", "d");
	}

	/**
	 * ImmutableList和ImmutableMap最常用的就是创建一些集合常量 (这些常量都是static final的).
	 * 另外一个主要的用途, 是作为其它Immutable对象内部使用的数据结构.
	 *
	 * 瓜娃开发组强烈推荐的使用方法, 在凡是可能的情况下, 给你的函数的返回类型用ImmutableList和ImmutableMap,
	 * 而不是它们实现的接口: List和Map。
	 *
	 * 为什么这样呢? 这是因为immutable集合是一类特殊集合, 它们不象ArrayList, HashMap那样是纯粹的实现细节,
	 * 相反, 这些类型携带了重要的语义信息: 它们是不可变的。
	 *
	 * 如果调用者使用了list.add()或者map.put(), 得到的将是UnsupportedOperationException异常.
	 *
	 * 通过返回ImmutableMap和ImmutableList, 函数签名清楚地告诉调用者什么可以做, 什么不可以做. 这对大型程序
	 * 中团队协作, 代码理解和维护好处多多。
	 *
	 * 
	 */
}
